将学习过程:spatial相关性和channel相关性分开,提出Depthwise Separable Convolutios,设计了新的结构Xception
介绍
文章链接。
常规卷积网络是CONV->POOL形式。通过CONV学习特征,通过POOL下采样,使网络在不同尺度空间都能提取特征。
Inception结构最初在GoogLeNet出现(Inception V1),随后有了Inception V2、Inception V3和Inception-ResNet。
Inception-style的结构有很多版本,下面是Inception V3版本中的结构:
Inception模型,是由连续多个Inception结构组成,就行VGG-style网络一样,由连续多个卷积组成。
Inception模型和卷积在概念上类似,都是卷积提取特征;但是Inception结构参数更少,提取的特征更加丰富。Inception结构工作原理是什么,和常规卷积有什么不同?Inception之后,设计网络的侧脸又是什么?
Inception假设
一个卷积层的卷积核是三个维度的,空间上width和height,还有一个channel维度。因此一个卷积层,既考虑映射cross-channel相关性,又考虑spatial相关性。
Inception背后的思想是通过分开独立处理cross-channel和spatial的相关性,使得处理过程更加简单高效。准确来说,Inception结构首先通过1x1卷积“看”cross-channel相关性,把输入映射到3或4个分开的空间(小于原输入空间),之后通过3x3或5x5卷积再映射到更小的3维空间,如上图所示。实际上,Inception基本的假设就是通过解耦和cross-channel和spatial相关性。
是否可以进一步假设cross-channel和spatial之间的相关性可以完全分开处理?
卷积和separable卷积之间的连续
基于上面进一步假设,有了“extreme”笨笨的Inception结构:
上面这种结构,几乎等同于depthwise separable卷积。depthwise separable卷积又叫做“separable卷积”,是通过处理每一个channel上的空间卷积,之后再经过pointwise卷积(例如1x1卷积),在一个新的channel空间得到输出。
“extreme”版本的Inception和depthwise separable卷积两点主要不同:
操作顺序:depthwise separable卷积首先channel-wise spatial卷积,之后1x1卷积;而Inception首先1x1卷积。
第一个操作后是否有非线性。Inception中,第一步和第二部操作都有非线性(ReLU);而depthwise separable卷积后面通常没有非线性操作。
上面两点不同种,第一点不同不太重要,第二点不同比较重要。
输入的每一个channel空间(width和height)对应一个“频谱”。1x1卷积把这些“频谱”合成一个;而depthwise separable卷积对每一个“频谱”做卷积。Inception结构把几百个channel分成3或4个。
基于以上观察,可以把Inception结构替换为depthwise separable卷积。
Xception结构
基于cross-channel和spatial相关性可以完全解耦和,作者提出一个新的卷积网络结构。这个假设是基于Inception结构的强假设,名字叫做“Extreme Inception”,简称“Xception”。结构如下:
Xception有36个卷积层,包含14个模块,线性Residual connection在这14个模块中。在图像分类中,最后一层是逻辑回归;可以在逻辑回归前面一层加上全连接层。
实验评估
对比Xception和Inception V3,因为它们两个参数个数接近。对比它们在图片分类上的效果。数据集一个是单标签的ImageNet,另一个是多标签的JFT。
优化方法配置
On ImageNet:
– Optimizer: SGD
– Momentum: 0.9
– Initial learning rate: 0.045
– Learning rate decay: decay of rate 0.94 every 2 epochsOn JFT:
– Optimizer: RMSprop
– Momentum: 0.9
– Initial learning rate: 0.001
– Learning rate decay: decay of rate 0.9 every 3,000,000 samples
正则化
Weight decay
Inception V3使用L2正则化,weight decay rate为4e-5(在ImageNet上tune得到的)。Xception使用1e-5。Dropout
在逻辑回归前加上dropout层,dropout rate为0.5.Auxiliary loss tower
Inception V3包含一个可选的auxiliary tower,在反向传播时当做正则化机制。为了简化,Xception没有包含。
训练工具
使用TensorFlow,60块NVIDIA K80 GPUs。
ImageNet使用同步梯度下降,训练了3天。
JFT使用异步梯度下降,训练了近一个月,并没有完全收敛。
和Inception V3对比
分类对比
ImageNet,使用validation set。Single model, single crop。
JFT对比,使用模型为迭代30,000,000次的模型:
Xception架构在JFT数据集性能提升明显高于在ImageNet数据集。可能是因为Inception V3设计时专注于ImageNet。
模型大小和速度
使用K80 GPU,同步梯度下降。
两个模型参数个数类似。Xception速度稍慢于Inception V3。未来需要在depthwise卷积上做些优化。
residual connections影响
Residual connection对收敛速度和精度都有帮助。需要注意,两者训练时都是用同一配置,对于不使用residual connection,调优配置可能得到更好的效果。
pointwise卷积后中间激活的影响
在depthwise和pointwise卷积之间使用不同激活函数
上面结果,不使用非线性激活性能好于使用非线性激活。这和《Rethinking the inception architecture for computer vision》结论相反。这可能和特征空间深度相关:对于深的特征空间(Inception中的),非线性有帮助;对于浅的(例如depthwise卷积,1-channel特征空间)反而有负面作用。